目录

  • 脚本方面
  • 执行环境端
  • 有关脚本变量的更多信息
  • 自动导出到 STL
  • 重要的 CQGI 方法
  • 完整的 CQGI API
  • CadQuery 首先被设计为一个库,可以用作任何项目的一部分。在这种情况下,不需要标准脚本格式或网关 API。

    虽然嵌入式使用案例最为常见,但也有一些工具可以代表用户运行 cadquery 脚本,然后以可视化方式呈现脚本结果。

    这些执行环境 (EE) 通常接受脚本和用户输入的脚本参数值,然后以可视方式向用户显示生成的对象。

    目前,存在三种执行环境:

    • CQ-editor,它在 CadQuery IDE 内运行脚本,并在显示窗口中显示对象,还包括调试等功能。

    • cq-directive,用于在 sphinx-doc 内执行脚本,生成的文档示例包括脚本和结果对象的 SVG 表示。。

    CQGI 随 CadQuery 一起发布,它规范了执行环境与 CadQuery 脚本之间的接口。

    脚本方面

    CQGI 容器为脚本提供执行环境。环境包括:

    • cadquery 库会自动导入为 "cq"。

    • cadquery.cqgi.ScriptCallback.show_object()方法用于将形状输出到执行环境中

    • cadquery.cqgi.ScriptCallBack.debug()可以使用该方法在执行期间调试模型输出。

    脚本必须至少调用一次 show_object。多次调用 show_object 会向容器发送多个对象。如果脚本没有使用 show_object() 方法返回对象,则会发生错误。

    该脚本符合 CQGI 标准,可生成一个顶部有圆的立方体,并显示工作平面和中间圆作为调试输出:

    base_cube = cq.Workplane("XY").rect(1.0, 1.0).extrude(1.0)
    top_of_cube_plane = base_cube.faces(">Z").workplane()
    debug(
        top_of_cube_plane,
        {
            "color": "yellow",
        },
    )
    debug(top_of_cube_plane.center, {"color": "blue"})
    
    circle = top_of_cube_plane.circle(0.5)
    debug(circle, {"color": "red"})
    
    show_object(circle.extrude(1.0))

    注意:debug 暂时不支持选项参数

    请注意,不需要导入 cadquery。本脚本结束时,除了一个工作平面、一个点和一个圆之外,还将显示一个对象

    未来的增强功能将包括其他几种方法,用于为执行环境提供更多元数据:

    执行环境端

    CQGI 可以轻松地以标准方式运行 cadquery 脚本。要从执行环境运行脚本,请运行如下代码:

    from cadquery import cqgi
    
    user_script = ...
    build_result = cqgi.parse(user_script).build()

    cadquery.cqgi.parse()方法返回一个cadquery.cqgi.CQModel对象。

    该对象的 metadata 属性包含一个cadquery.cqgi.ScriptMetaData对象,可用于发现可用的用户参数。如果执行环境想要提供 GUI 以允许用户更改模型参数,则这非常有用。通常情况下,在收集新值后,环境将在 build() 方法中提供这些值。

    此代码将返回模型文本 SCRIPT的参数值字典:
    parameters = cqgi.parse(SCRIPT).metadata.parameters

    返回的字典是一个映射,其中 key 是参数名称,value 是一个 InputParameter 对象,该对象有名称、类型和默认值。

    类型是一个扩展了 ParameterType 的对象,您可以用它来确定要渲染哪种 widget(例如,布尔型的复选框)。

    如果用户使用 describe_parameter() 方法提供了参数描述、有效值、最小值和最大值,那么参数对象也有这些描述、有效值、最小值和最大值。

    调用cadquery.cqgi.CQModel.build()返回一个cadquery.cqgi.BuildResult对象,其中包括脚本执行时间和成功标志。

    如果脚本运行成功,结果属性将包括脚本返回的结果列表,以及脚本产生的所有调试信息

    如果脚本运行失败,异常属性中将包含异常对象。

    如果有办法从用户那里获取输入,就可以用新的值覆盖用户脚本中定义的任何常量:

    from cadquery import cqgi
    
    user_script = ...
    build_result = cqgi.parse(user_script).build(
        build_parameters={"param": 2}, build_options={}
    )

    如果模型中定义了一个名为 "param "的参数,那么在脚本运行前,它将被赋值为 2。如果提供的值未在模型中定义,或提供的值无法分配给给定名称的变量,则会发生错误。

    build_options 用于设置服务器端设置,例如超时、细分容差以及有关如何构建模型的其他详细信息。

    有关脚本变量的更多信息

    CQGI 使用以下规则来查找脚本的输入变量:

    • 仅考虑顶层语句

    • 仅考虑将常量值分配给本地名称。

    例如,在以下脚本中:

    h = 1.0
    w = 2.0
    foo = "bar"
    
    
    def some_function():
        x = 1

    h、w 和 foo 将是可重写的脚本变量,但 x 不是。

    您可以使用 parse 方法的返回值列出模型中定义的变量:

    model = cqgi.parse(user_script)
    
    # a dictionary of InputParameter objects
    parameters = model.metadata.parameters

    字典的键是一个 string ,值是一个cadquery.cqgi.InputParameter对象 有关更多详细信息,请参阅 CQGI API 文档。

    未来的增强功能将包括更安全的沙箱以防止恶意脚本。

    自动导出到 STL

    CQGI 的一个常见用例是将 cadquery 代码自动处理为几何图形,通过 CQGI 而不是脚本本身中的导出行来执行此操作会导致更加整洁的环境;您可能需要将其作为自动化工作流程、批量转换、导出到另一个软件进行装配或在生成的实体上运行应力模拟的一部分。

    以下 Python 脚本演示了如何从任何有效的 cadquery 脚本打开、处理和导出 STL 文件:

    # Load CQGI
    import cadquery.cqgi as cqgi
    import cadquery as cq
    
    # load the cadquery script
    model = cqgi.parse(open("example.py").read())
    
    # run the script and store the result (from the show_object call in the script)
    build_result = model.build()
    
    # test to ensure the process worked.
    if build_result.success:
        # loop through all the shapes returned and export to STL
        for i, result in enumerate(build_result.results):
            cq.exporters.export(result.shape, f"example_output{i}.stl")
    else:
        print(f"BUILD FAILED: {build_result.exception}")

    重要的 CQGI 方法

    这些是 CQGI 最重要的方法和类

    parse(script_source)将脚本解析为模型,并返回模型。
    CQModel.build([build_parameters, build_options])执行脚本,使用可选参数覆盖模型中的参数
    BuildResult()执行 CadQuery 脚本的结果。
    ScriptCallback.show_object(shape[, options])将带有选项的对象返回到执行环境。

    完整的 CQGI API

    CadQuery 网关接口。提供用于执行 CadQuery 脚本的类和工具

    classcadquery.cqgi.BuildResult [source]

    执行 CadQuery 脚本的结果。success 属性包含执行是否成功。

    如果成功,结果属性将包含所有结果的列表,而 first_result 属性则包含第一个结果。

    如果不成功,异常属性将包含对发生的堆栈跟踪的引用。

    classcadquery.cqgi.CQModel(script_source) [source]
    代表 Cadquery 脚本。

    构建完成后,元数据属性包含一个 ScriptMetaData 对象,该对象更详细地描述了模型,可用于检索模型定义的参数。

    构建方法可用于生成 3D 模型

    build(build_parameters=None, build_options=None) [source]

    执行脚本,使用可选参数覆盖模型中的参数

    Parameters

    • build_parameters – 变量字典。变量必须可分配给基础变量类型。这些变量会覆盖脚本中的默认值

    • build_options – 有关如何构建模型的构建选项。构建选项包括超时、曲面细分容差等

    Raises
    无异常。如果出现异常,则会出现在结果的异常属性中。有了这个接口,我们就可以返回结果的其他信息,例如构建时间

    Returns
    一个 BuildResult 对象,其中包括结果的状态,以及结果形状或异常情况

    validate(params) [source]

    确定提供的参数是否有效。尚未实施- 引发 NotImplementedError(未实施错误
    Parameters
    • params – 参数字典

    class cadquery.cqgi.ConstantAssignmentFinder(cq_model) [source]
    访问解析树,并为 cqModel 添加脚本参数

     

    class cadquery.cqgi.EnvironmentBuilder [source]

    为 cadquery 脚本构建执行环境。该环境包括内置方法以及脚本需要的其他方法。

     

    class cadquery.cqgi.InputParameter [source]

    定义模型执行时可提供的参数。

    Name、varType 和 default_value 始终可用,因为它们是通过变量赋值代码行计算得出的:

    其他参数只有在脚本使用 define_parameter() 提供附加元数据时才可用
    default_value
    变量的默认值。
    desc
    描述变量的帮助文本。仅在脚本使用 describe_parameter() 时可用
    name
    参数的名称。
    valid_values
    变量的有效值。仅当脚本使用 describe_parameter() 时可用
    varType
    变量的类型:布尔参数、字符串参数、数值参数

     

    exception cadquery.cqgi.InvalidParameterError [source]

    当试图提供一个无法分配给模型的新参数值时发生该故障

     

    exception cadquery.cqgi.NoOutputError [source]

    当脚本未执行 show_object()方法返回实体时发生该错误。

     

    class cadquery.cqgi.ParameterDescriptionFinder(cq_model) [source]
    访问解析树,查找 describe_parameter(var, description ) 的函数调用
    visit_Call(node)[source]
    当我们看到函数调用时调用。是 describe_parameter(参数描述)吗?

     

    class cadquery.cqgi.ScriptCallback [source]
    允许脚本与容器通信 show_object() 方法暴露给 CQ 脚本,允许它们向执行环境返回对象
    add_error(param, field_list) [source]
    尚未实施:允许脚本显示输入存在问题
    debug(obj, args={})[source]
    调试打印/输出对象,参数可选。
    describe_parameter(var_data) [source]
    什么都不做--我们在执行前对 ast 进行了解析,以获得我们需要的东西。
    show_object(shape, options={'name': 'door'}, **kwargs )[source]
    向执行环境返回一个包含选项的对象。

    Parameters

    • shape – 查询对象

    • options – 将提供给执行环境的选项字典

     

    exception cadquery.cqgi.ScriptExecutionError(line=None, message=None) [source]
    代表脚本语法错误。有助于帮助客户以交互方式找出脚本中的问题

     

    class cadquery.cqgi.ScriptMetadata [source]
    参数属性是一个输入参数对象的 dict。

     

    class cadquery.cqgi.ShapeResult [source]
    创建的对象,包括提供的用户参数

     

    class cadquery.cqgi.parse(script_source) [source]
    将脚本解析为模型,并返回模型。

    如果您希望在不构建模型的情况下访问底层模型,例如检查其可用参数,请构建一个 CQModel 对象。

    Parameters

    • script_source – 要运行的脚本。必须是有效的 cadquery 脚本

    Returns
    定义脚本并允许执行的 CQModel 对象

     

    作者:码峰  创建时间:2023-12-20 17:57
    最后编辑:码峰  更新时间:2024-01-12 18:00